插入r个乘号问题的动态规划求解

本文介绍了如何使用动态规划解决在一个数字串中插入指定数量的乘号以获得最大乘积的问题。通过递推关系和边界值计算,找到最优解并给出程序实现。
摘要由CSDN通过智能技术生成

 利用穷举法求解法插入4个乘号请访问:http://www.vcworld.net/bbs/viewthread.php?tid=8580&extra=

一、问题提出

     在一个由n个数字组成的数字串中插入r个乘号(1<=r<n<16),将它分成r+1个整数,找出一种乘号的插入方法,使得r+1个整数的乘积最大。

     例如,对给定的数串847313926,如何插入r=5个乘号,使其积最大?

 

二、动态规划设计

     对于一般插入r个乘号,采用穷举已不适合。注意到插入r个乘号是一个多阶段决策问题,应用动态规划来求解是适宜的。

     1.建立递推关系

     设f(i,k)表示在前i位数中插入k个乘号所得乘积的最大值,a(i,j)表示从第i个数字到第j个数字所组成的j-i+1(i<=j)位整数值。

     为了寻求递推关系,先看一个实例:对给定的847313926,如何插入r=5个乘号,使其乘积最大?我们的目标是为了求取最优值f(9,5)。

     ①设前8个数字中已插入4个乘号,则最大乘积为f(8,4)*6;

     ②设前7个数字中已插入4个乘号,则最大乘积为f(7,4)*26;

     ③设前6个数字中已插入4个乘号,则最大乘积为f(

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值